package cn.jiahua.dao;

import cn.jiahua.pojo.User;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

public interface UserMapper {
    /**
     * 查询用户总数
     * @return
     */
    public int selectUserCount();

    /**
     * 查看用户列表
     * @return
     */
    public List<User> selectUserList();


    /**
     * 删除用户
     * @param id
     * @return
     */
    public int deleteUserById(Integer id);


    /**
     * 根据用户名查询用户列表信息
     * @param name
     * @return
     */
    public List<User> selectUserListByName(String name);


    /**
     * 根据用户名查询用户列表信息
     * 多参数入参， parameterType不要了
     * 1.@Param("key")  --> #{key}
     * 2.User对象入参
     * 3.Map入参
     * @param name
     * @return
     */
    public List<User> selectUserListByName2(@Param("name")String name,@Param("roleId") Integer roleId);

    public List<User> selectUserListByName3(User user);

    public List<User> selectUserListByName4(Map map);



    /**
     * 根据用户名查询用户列表信息,返回中文的角色
     * @param map
     * @return：
     */
    public List<User> selectUserListByName5(Map map);


    /**
     * 添加用户
     * @param user
     * @return
     */
    public int insertUser(User user);


    /**
     * 更新用户
     * @param user
     * @return
     */
    public int  updateUser(User user);


    public  int changePassword(@Param("newPassword") String newPassword,@Param("id") Integer id);


    public List<User> selectUserListByRoleId(Integer id);

    /**
     * 获取用户的详细信息，包括他的房子租给谁的情况都要封装user对象中返回
     * @param id
     * @return
     */
    public User selectUserDetailById(Integer id);


    /**
     * 动态sql trim
     * @param name
     * @param roleId
     * @return
     */
    public List<User> selectUserListByNameTrim(@Param("name")String name,@Param("roleId") Integer roleId);


    /**
     * trim
     * @param id
     * @return
     */
    public int updateUserTrim(Integer id);


    /**
     * foreach使用
     * @param roleId
     * @return
     */
    public List<User> selectUserListByRole(@Param("roleId") Integer[] roleId);

    /**
     * foreach使用
     * @param roleId
     * @return
     */
    public List<User> selectUserListByRole2(@Param("roleId") List roleId);


    /**
     * foreach使用
     * @param rolesId
     * @return
     */
    public List<User> selectUserListByRole3( Map rolesId);


    /**
     * 动态sql choose
     * @param name
     * @param roleId
     * @return
     */
    public List<User> selectUserListByNamechoose(@Param("name")String name,@Param("roleId") Integer roleId);


    /**
     * 分页查询
     * @param userName 用户名
     * @param roleId 角色id
     * @param from 起始下标= (页大小-1)*pageSize
     * @param pageSize 页大小 每页显示数据条数
     * @return
     */
    public List<User> selectUserListByPage(@Param("username")String userName,
                                           @Param("roleId")Integer roleId,
                                           @Param("from") Integer from,
                                           @Param("pageSize")Integer pageSize);



}
